package com.googlecode.adaboost.module;

import java.util.Map;

import com.googlecode.adaboost.exception.AdaBoostException;
import com.googlecode.adaboost.trainer.AdaBoostConfiguration;

/**
 * The general interface all modules must adhere to. The only additional
 * constraint is that they must have a no-argument public constructor.
 * 
 * @author Aaron
 */
public interface Module {
	/**
	 * After a module is created using reflection this is called to initalize
	 * it. So, this will be called after the module class has been constructed
	 * (using reflection to call its mandatory no-argument constructor), but
	 * before any of the modules specific methods.
	 * 
	 * @param systemSettings
	 *            System wide settings and information.
	 * @param moduleSettings
	 *            Setting information specific to this module.
	 */
	void initalize(AdaBoostConfiguration systemSettings,
			Map<String, String> moduleSettings) throws AdaBoostException;
}
